#pragma once
//实现struct addr_in结构体网络序列和主机序列的相互转化
#include <iostream>
#include <string>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>

class InetAddr
{
    public:
    InetAddr(struct sockaddr_in& addr):_addr(addr)
    {
        _port=ntohs(_addr.sin_port);//网络序列转主机序列
        _ip=inet_ntoa(_addr.sin_addr);//4字节的网络风格Ip，转化为点分十进制的主机IP
    }
    //获取端口号和IP
    std::string Ip() {return _ip;}
    uint16_t Port() {return _port;}
    //获取sockaddr结构体
    const struct sockaddr_in &NetAddr()
    {
        return _addr;
    }
    //重载==方法 
    bool operator==(const InetAddr& addr)
    {
        return addr._ip==_ip&& addr._port==_port;
    }
    std::string StringAdd()
    {
        return _ip+": "+std::to_string(_port);
    }
    ~InetAddr()
    {}
    private:
    struct sockaddr_in _addr;
    std::string _ip;
    uint16_t _port;
};